package com.zenith.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenith.user.po.domain.User;
import com.zenith.user.po.dto.UserDTO;
import com.zenith.user.po.vo.UserVO;
import com.zenith.common.result.PageResult;

import java.util.List;

/**
 * 用户表(TUser)服务接口
 *
 * @author makejava
 * @since 2025-08-15 21:58:32
 */
public interface UserService extends IService<User> {

    /**
     * 分页查询用户
     *
     * @param query 查询条件（包含分页参数）
     * @return 分页结果
     */
    PageResult<User> getUserPage(UserDTO query);

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);
    
    /**
     * 根据用户ID查询用户
     *
     * @param id 用户ID
     * @return 用户信息
     */
    User getUserById(Long id);
    
    /**
     * 创建用户
     *
     * @param userDTO 用户信息
     * @return 创建结果
     */
    boolean createUser(UserDTO userDTO);
    
    /**
     * 更新用户信息
     *
     * @param userDTO 用户信息
     * @return 更新结果
     */
    boolean updateUser(UserDTO userDTO);
    
    /**
     * 删除用户（逻辑删除）
     *
     * @param id 用户ID
     * @return 删除结果
     */
    boolean deleteUser(Long id);
    
    /**
     * 批量根据ID查询用户信息
     *
     * @param ids 用户ID列表
     * @return 用户VO列表
     */
    List<UserVO> getUsersByIds(List<Long> ids);
    
    /**
     * 更新用户状态
     *
     * @param id 用户ID
     * @param status 状态
     * @return 更新结果
     */
    boolean updateUserStatus(Long id, Integer status);
    
    /**
     * 重置用户密码
     *
     * @param id 用户ID
     * @param newPassword 新密码
     * @return 重置结果
     */
    boolean resetPassword(Long id, String newPassword);

    // =========================== 新增缺失方法 ===========================

    /**
     * 获取当前用户信息
     *
     * @param userId 用户ID
     * @return 用户VO信息
     */
    UserVO getCurrentUserInfo(Long userId);

    /**
     * 更新用户个人资料
     *
     * @param userDTO 用户信息
     * @return 更新结果
     */
    boolean updateUserProfile(UserDTO userDTO);

    /**
     * 修改用户密码
     *
     * @param userId 用户ID
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @return 修改结果
     */
    boolean changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 更新用户头像
     *
     * @param userId 用户ID
     * @param avatarUrl 头像URL
     * @return 更新结果
     */
    boolean updateAvatar(Long userId, String avatarUrl);

    /**
     * 批量分配用户角色
     *
     * @param userIds 用户ID列表
     * @param roleIds 角色ID列表
     * @return 分配结果
     */
    boolean batchAssignRoles(List<Long> userIds, List<Long> roleIds);

    /**
     * 高级搜索用户
     *
     * @param keyword 搜索关键词
     * @param status 状态
     * @param role 角色
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 搜索结果
     */
    PageResult<UserVO> searchUsers(String keyword, Integer status, String role, Integer pageNum, Integer pageSize);
}